structural design patterns c